/**
 * 为路由添加 meta.path 属性，path 值为 '/组件名称'，子路由包含父路由路径
 * @param {Array} routes - 路由数组
 * @returns {Array} - 处理后的路由数组
 */
export function addPathToMeta(routes) {
  if (!Array.isArray(routes)) {
    return routes
  }

  const processRoute = (route, parentPath = '') => {
    // 确保 meta 对象存在
    if (!route.meta) {
      route.meta = {}
    }

    // 当前路由路径
    let currentPath = parentPath

    // 获取组件名称，并添加前缀斜杠
    if (route.component) {
      // 提取组件名称，去掉可能的路径前缀，只保留最后一部分
      const componentName = route.component.split('/').pop()
      // 构建当前路径，如果有父路径则拼接，否则直接使用 /组件名
      currentPath = parentPath
        ? `${parentPath}/${componentName}`
        : `/${componentName}`
      // 设置 meta.path
      route.meta.path = currentPath
    }

    // 处理子路由，传递当前路径作为父路径
    if (Array.isArray(route.children) && route.children.length > 0) {
      route.children = route.children.map((child) =>
        processRoute(child, currentPath)
      )
    }

    return route
  }

  // 处理每个顶级路由
  return routes.map((route) => processRoute(route, ''))
}

/**
 * 处理路由配置，添加必要的路径信息
 * @param {Object|Array} routeConfig - 路由配置对象或数组
 * @returns {Object|Array} - 处理后的路由配置
 */
export function processRouteConfig(routeConfig) {
  // 处理数组形式的路由
  if (Array.isArray(routeConfig)) {
    return addPathToMeta(routeConfig)
  }

  // 处理对象形式的路由配置
  if (routeConfig && typeof routeConfig === 'object') {
    if (Array.isArray(routeConfig.routes)) {
      routeConfig.routes = addPathToMeta(routeConfig.routes)
    }
  }

  return routeConfig
}

export default processRouteConfig
